#include "ProtocoloPlano.h"
#include "../../utils/UtilString.h"
#include "../DTO/DTOFlight.h"
#include "../DTO/DTOFlightRelated.h"
#include "../DTO/DTOFlightControler.h"
#include "../DTO/DTOFlightGeneratorEnded.h"
#include "../DTO/DTOFlightControlerRequest.h"
#include "../DTO/DTORunwayRelated.h"
#include "../../utils/Logger.h"

ProtocoloPlano::ProtocoloPlano(){}

DTO* ProtocoloPlano::deserializar(std::string& serializacion){

	DTOTypes tipoDTO = getTipoDTO(serializacion);

	switch (tipoDTO) {
		case RUNWAY_RELATED:
			return new DTORunwayRelated(serializacion);
			break;
		case FLIGHT_RELATED:
			return new DTOFlightRelated(serializacion);
			break;
		case END_GENERADOR:
			return new DTOFlightGeneratorEnded(serializacion);
			break;
		case FLIGHT:
			return new DTOFlight(serializacion);
			break;
		case FLIGHT_CONTROLER:
			return new DTOFlightControler(serializacion);
			break;
		case FLIGHT_CONTROLER_REQUEST:
			return new DTOFlightControlerRequest(serializacion);
			break;
		default:
			Logger::instancia() << "ERROR - No pude identificar el tipo de mensaje " << eol;
			break;
	}

	return NULL;
}

DTOTypes ProtocoloPlano::getTipoDTO(std::string& serializacion){

	std::vector<std::string> valores;
	UtilString::splitWithSeparator(&valores,serializacion,PLANO_SEPARATOR);

	return (DTOTypes)UtilString::stringToInt(valores[0]);
}

std::string ProtocoloPlano::serializar(DTO& dto){
	return dto.serializar();
}



